package com.example.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.springframework.web.servlet.HandlerInterceptor;  
import org.springframework.web.servlet.ModelAndView;
public class ExampleInterceptor implements HandlerInterceptor {
	private final Logger logger=LoggerFactory.getLogger(this.getClass().getName());
	   /** 
	     * 在业务处理器处理请求之前被调用 
	     * 如果返回false 
	     * 从当前的拦截器往回执行所有拦截器的afterCompletion(),再退出拦截器链 
	     * 如果返回true 
	     * 执行下一个拦截器,直到所有的拦截器都执行完毕 
         * 再执行被拦截的Controller 
         * 然后进入拦截器链, 
	     * 从最后一个拦截器往回执行所有的postHandle() 
	     * 接着再从最后一个拦截器往回执行所有的afterCompletion() 
	    */  

	@Override
	public boolean preHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler) throws Exception {
            logger.info("拦截器开始.....");
            String url=request.getRequestURL().toString();  
           String msg=(String) request.getSession().getAttribute("loginname");
            logger.info("拦截的url是{},登陆的msg{}",new String[]{url,msg});
		   //return false;
           return true;
	}

	
	@Override
	public void postHandle(HttpServletRequest request,
			HttpServletResponse response, Object handler,
			ModelAndView modelAndView) throws Exception {

		logger.info("在业务处理器处理请求执行完成后,生成视图之前执行的动作");
	}

	 /** 
	* 在DispatcherServlet完全处理完请求后被调用  
	* 当有拦截器抛出异常时,会从当前拦截器往回执行所有的拦截器的afterCompletion() 
	*/
	@Override
	public void afterCompletion(HttpServletRequest request,
			HttpServletResponse response, Object handler, Exception ex)
			throws Exception {
		// TODO Auto-generated method stub
		
		logger.info("最后的方法。。。。");
		
	}

}
